package com.hyb.algorithm.data.struct.math;


/**
 * @BelongProject algorithm
 * @BelongPackage com.hyb.algorithm.data.struct.math
 * @Description 判断是否存在循环引用
 * 使用引用计数来进行资源管理时，往往需要检测是否存在循环引用
 * 假设有n个元素，m个引用关系，每个引用关系(u, v)表示元素u引用了元素v，判断其中是否存在循环引用
 * <p>
 * 输入格式如下：
 * n m
 * u_0 v_0
 * ...
 * u_(m-1) v_(m-1)
 * <p>
 * u_1 v_1
 * <p>
 * 输出1或0，表示是否存在循环引用
 * @ClassName UVMap
 * @Author huyangbing
 * @Date 2025/2/21 10:11
 * @Version 1.0.0
 */
public class UVMap {


    public static void main(String[] args) {

//        UVMap uvMap = new UVMap();
//
//        System.out.println(uvMap.checkRef("n", "m"));
//        ;
//
//        System.out.println(uvMap.checkRef("n_1", "m_1"));
//
//        System.out.println(uvMap.checkRef("n_0", "m_1"));


    }


    /**
     * u_(m-1) v_(m-1)
     *
     * @param src
     * @param des
     * @return
     */
    public int checkRef(String src, String des) {

        if (src == null || des == null) {
            return 0;
        }

        int srcCount = 0;
        int desCount = 0;
        String[] srcArry = src.split("_");
        String[] desArry = des.split("_");

        if (srcArry.length > 1) {
            srcCount = convertStrToInt(src.split("_")[1]);
        }


        if (desArry.length > 1) {
            desCount = convertStrToInt(des.split("_")[1]);
        }


        if (srcCount > 0 && desCount > 0) {
            return 1;
        }

        return 0;


    }

    public int convertStrToInt(String str) {

        if (str == null || str.length() == 0) {
            return 0;
        }

        return Integer.parseInt(str);
    }





}
